package it.clariter.dao;

import it.clariter.connection.MyConnection;
import it.clariter.model.Azienda;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

public class AziendaDAO {

	public int insert(Azienda azienda)
	{
		Connection c=null;
		PreparedStatement ps=null;
		int result=0;
		try
		{
			c=MyConnection.getConnection();
			ps=c.prepareStatement("INSERT INTO "+DaoConstants.NOME_TABELLA_AZIENDA+" SET "+DaoConstants.COLONNA_CODICE_AZIENDA+"=?,"+DaoConstants.COLONNA_DESCRIZIONE_AZIENDA+"=?,"+DaoConstants.COLONNA_RAGIONE_SOCIALE_AZIENDA+"=?,"+DaoConstants.COLONNA_INDIRIZZO_AZIENDA+"=?,"+DaoConstants.COLONNA_CODICE_FISCALE_AZIENDA+"=?");
			ps.setString(1, azienda.getCodice());
			ps.setString(2, azienda.getDescrizione());
			ps.setString(3, azienda.getRagioneSociale());
			ps.setString(4, azienda.getIndirizzo());
			ps.setString(5, azienda.getCodiceFiscale());
			result=ps.executeUpdate();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				ps.close();
				c.close();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
		return result;
	}
	public int update(Azienda azienda)
	{
		Connection c=null;
		PreparedStatement ps=null;
		int result=0;
		try
		{
			c=MyConnection.getConnection();
			ps=c.prepareStatement("UPDATE "+DaoConstants.NOME_TABELLA_AZIENDA+" SET "+DaoConstants.COLONNA_CODICE_AZIENDA+"=?,"+DaoConstants.COLONNA_DESCRIZIONE_AZIENDA+"=?,"+DaoConstants.COLONNA_RAGIONE_SOCIALE_AZIENDA+"=?,"+DaoConstants.COLONNA_INDIRIZZO_AZIENDA+"=?,"+DaoConstants.COLONNA_CODICE_FISCALE_AZIENDA+"=? WHERE "+DaoConstants.COLONNA_ID_AZIENDA+"=?");
			ps.setString(1, azienda.getCodice());
			ps.setString(2, azienda.getDescrizione());
			ps.setString(3, azienda.getRagioneSociale());
			ps.setString(4, azienda.getIndirizzo());
			ps.setString(5, azienda.getCodiceFiscale());
			ps.setInt(6, azienda.getIdAzienda());
			result=ps.executeUpdate();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				ps.close();
				c.close();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
		return result;
	}
	public int delete(int idva)
	{
		Connection c=null;
		PreparedStatement ps=null;
		int result=0;
		try
		{
			c=MyConnection.getConnection();
			ps=c.prepareStatement("DELETE FROM "+DaoConstants.NOME_TABELLA_AZIENDA+" WHERE "+DaoConstants.COLONNA_ID_AZIENDA+"=?");
			ps.setInt(1, idva);
			result=ps.executeUpdate();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				ps.close();
				c.close();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
		return result;
	}
	public List<Azienda>getList()
	{
		Connection c=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		List <Azienda>list=new ArrayList<Azienda>();
		Azienda azienda=null;
		try
		{
			c=MyConnection.getConnection();
			ps=c.prepareStatement("SELECT * FROM "+DaoConstants.NOME_TABELLA_AZIENDA);
			rs=ps.executeQuery();
			while(rs.next())
			{
				azienda=new Azienda();
				azienda=makeObject(azienda,rs);
				list.add(azienda);
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				rs.close();
				ps.close();
				c.close();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
		return list;
	}
	public Azienda get(int idva)
	{
		Connection c=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		Azienda azienda=null;
		try
		{
			c=MyConnection.getConnection();
			ps=c.prepareStatement("SELECT * FROM "+DaoConstants.NOME_TABELLA_AZIENDA+" WHERE "+DaoConstants.COLONNA_ID_AZIENDA+"=?");
			ps.setInt(1, idva);
			rs=ps.executeQuery();
			if(rs.next())
			{
				azienda=new Azienda();
				azienda=makeObject(azienda,rs);
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				rs.close();
				ps.close();
				c.close();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
		return azienda;
	}
	public List<Azienda> findByExample(Azienda azienda)
	{
		Connection c=null;
		Statement stm=null;
		ResultSet rs=null;
		Azienda azienda1=null;
		List<Azienda>list=new ArrayList<Azienda>();
		String query="SELECT * FROM "+DaoConstants.NOME_TABELLA_AZIENDA+" WHERE 1=1 ";
		try
		{
			c=MyConnection.getConnection();
			if((azienda.getCodice()!=null)&&(!(azienda.getCodice().equals(""))))
			{
				query=query+" AND "+DaoConstants.COLONNA_CODICE_AZIENDA+" LIKE '"+azienda.getCodice()+"%' ";
			}
			if((azienda.getDescrizione()!=null)&&(!(azienda.getDescrizione().equals(""))))
			{
				query=query+" AND "+DaoConstants.COLONNA_DESCRIZIONE_AZIENDA+" LIKE '"+azienda.getDescrizione()+"%' ";
			}
			if((azienda.getRagioneSociale()!=null)&&(!(azienda.getRagioneSociale().equals(""))))
			{
				query=query+" AND "+DaoConstants.COLONNA_RAGIONE_SOCIALE_AZIENDA+" LIKE '"+azienda.getRagioneSociale()+"%' ";
			}
			if((azienda.getIndirizzo()!=null)&&(!(azienda.getIndirizzo().equals(""))))
			{
				query=query+" AND "+DaoConstants.COLONNA_INDIRIZZO_AZIENDA+" LIKE '"+azienda.getIndirizzo()+"%' ";
			}
			if((azienda.getCodiceFiscale()!=null)&&(!(azienda.getCodiceFiscale().equals(""))))
			{
				query=query+" AND "+DaoConstants.COLONNA_CODICE_FISCALE_AZIENDA+" LIKE '"+azienda.getCodiceFiscale()+"%' ";
			}
			stm=c.createStatement();
			rs=stm.executeQuery(query);
			while(rs.next())
			{
				azienda1=new Azienda();
				azienda1=makeObject(azienda1,rs);
				list.add(azienda1);
			}
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
		finally
		{
			try
			{
				rs.close();
				stm.close();
				c.close();
			}
			catch(Exception e)
			{
				e.printStackTrace();
			}
		}
		return list;
	}
	{

	}
	public Azienda makeObject(Azienda azienda,ResultSet rs) throws SQLException
	{
		azienda.setIdAzienda(rs.getInt(DaoConstants.COLONNA_ID_AZIENDA));
		azienda.setCodice(rs.getString(DaoConstants.COLONNA_CODICE_AZIENDA));
		azienda.setDescrizione(rs.getString(DaoConstants.COLONNA_DESCRIZIONE_AZIENDA));
		azienda.setRagioneSociale(rs.getString(DaoConstants.COLONNA_RAGIONE_SOCIALE_AZIENDA));
		azienda.setIndirizzo(rs.getString(DaoConstants.COLONNA_INDIRIZZO_AZIENDA));
		azienda.setCodiceFiscale(rs.getString(DaoConstants.COLONNA_CODICE_FISCALE_AZIENDA));
		return azienda;
	}
}

